從本日的文章開始的幾天內會介紹一些額外還沒介紹到的訓練技巧,今天會先從Transfer Learning開始。
讓我們先參考wikipedia的定義:
很好,十分的General。如果有一點的數學底子的朋友千萬不要覺得這麼general是在講什麼鬼?因為它就是這麼如此的General,所以利用Transfer Learning概念實作的方式可說是包山包海。
那讓我們說回人話,基本上就是有個主要的task與domain組合是T需要學習時,如果能利用到任何一個task與domain組合S的知識,就可說是遷移學習(Transfer Learning)。
好吧!這聽起來還是很抽象。這邊舉兩個目前我實務上也比較常用到的例子:
更多關於Transfer Learning,有興趣的朋友可以參考台大李宏毅老師的線上課程。
那回到我們系列文的實作,這裡主要會使用ImageNet Pretrained Weight的Fine-tune為例。不過回到一個重點,要去哪裡找這些pre-trained呢?以下推薦幾個相容PyTorch的套件:
以我們系列文實驗的monai.networks.nets.EfficientNetBN
來說,只要將pretrained = True
就可使用imagenet的pretrained來進行fine-tune了!(具體請參考文件)
具體修改過的code可以參這個commit,跑完以後讓我們來參考一下wandb上的結果。
使用Pre-trained的模型是不是訓練成效更快,而且獲得了更好效果呢!
(另外第二個cosine效果不太好,可能就是這組超參數在後面不太適合pretrained了呢!)